prepare-root: Use tempdir for transient etc backing
authorColin Walters <walters@verbum.org>
Tue, 24 Jun 2025 21:14:54 +0000 (17:14 -0400)
committerColin Walters <walters@verbum.org>
Thu, 26 Jun 2025 14:41:25 +0000 (10:41 -0400)
Prep for soft reboots.

Signed-off-by: Colin Walters <walters@verbum.org>
src/libotcore/otcore-prepare-root.c

index dcf5bead963a1df1eec43944f178f6d6b78d0104..7328698af8c14f58d32e25d73b0b276d4a9f69dd 100644 (file)
@@ -382,7 +382,12 @@ otcore_mount_etc (GKeyFile *config, GVariantBuilder *metadata_builder, const cha
   g_autofree char *target_etc = g_build_filename (mount_target, "etc", NULL);
   if (etc_transient)
     {
-      const char *ovldir = "/run/ostree/transient-etc";
+      // Right now we just reuse the global /run tmpfs as a place to put temporary files.
+      // In order to handle soft reboots, we need a randomly named temporary directory.
+      g_autofree char *ovldir_buf = g_strdup ("/run/ostree/transient-etc.XXXXXX");
+      const char *ovldir = g_mkdtemp_full (ovldir_buf, 0700);
+      if (!ovldir)
+        return glnx_throw_errno_prefix (error, "failed to create transient etc tempdir");
 
       g_variant_builder_add (metadata_builder, "{sv}", OTCORE_RUN_BOOTED_KEY_TRANSIENT_ETC,
                              g_variant_new_string (ovldir));